<template>
  <div class="person">
    姓：<input type="text" v-model="firstName"> <br>
    名：<input type="text" v-model="lastName"> <br>
    全名：<span>{{ fullName }}</span> <br>
    <button @click="changeFullName">改成lisi</button>
  </div>
</template>
<script lang="ts" setup name="Person">
import { ref, computed } from 'vue'
// computed作用：根据已有数据计算出新数据 和vue2中的computed作用一致
 let firstName = ref('zhang')
 let lastName = ref('san')
// 计算方法没有缓存 用几次调用几次
//  function fullName2 () {
//   console.log(2)
//   return firstName.value.slice(0,1).toUpperCase()+firstName.value.slice(1)+'-'+lastName.value
//  }

// 计算属性有缓存 这么定义只可读
//  let fullName = computed(()=>{
//   console.log(1)
//   return firstName.value.slice(0,1).toUpperCase()+firstName.value.slice(1)+'-'+lastName.value
//  })

// 这么定义的计算属性 可读可写
let fullName = computed({
  get(){
      return firstName.value.slice(0,1).toUpperCase()+firstName.value.slice(1)+'-'+lastName.value
  },
  set(val){
    console.log('set',val)
    const [str1, str2] = val.split('-')
    firstName.value = str1
    lastName.value = str2
  }
})

function changeFullName() {
  fullName.value = 'li-si'
}
</script>

<style scoped>
    .person {
        background-color: #ddd;
        box-shadow: 0 0 10px;
        border-radius: 10px;
        padding: 20px;
    }
    button {
        margin: 0 5px;
    }
</style>
